package com.spring_mysql_redis.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.spring_mysql_redis.dto.UserLikCountDTO;
import com.spring_mysql_redis.dto.UserLikesDto;
import com.spring_mysql_redis.entity.UserLikes;
import com.spring_mysql_redis.eum.LikedStatusEum;
import com.spring_mysql_redis.mapper.UserLikesMapper;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author:
 */
@Component
public class RedislikeTest {
//    @Resource
//    private RedisTemplate redisTemplate;
//    @Resource
//    private UserLikesMapper userLikesMapper;
//
//    public void likes(String dynamicId, String likeUserId) {
//        String likedKey = RedisKeyUtils.getLikedKey(dynamicId, likeUserId);
//        redisTemplate.opsForHash().increment(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, dynamicId, 1);
//        redisTemplate.opsForHash().put(RedisKeyUtils.MAP_KEY_USER_LIKED, likedKey, LikedStatusEum.LIKE.getCode());
//    }
//
//
//    public void unLikes(String dynamicId, String likeUserId) {
//        String likedKey = RedisKeyUtils.getLikedKey(dynamicId, likeUserId);
//        redisTemplate.opsForHash().increment(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, dynamicId, -1);
//        redisTemplate.opsForHash().delete(RedisKeyUtils.MAP_KEY_USER_LIKED, likedKey);
//    }
//
//    public Object likeStatus(String dynamicId, String likeUserId) {
//        if (redisTemplate.opsForHash().hasKey(RedisKeyUtils.MAP_KEY_USER_LIKED, RedisKeyUtils.getLikedKey(dynamicId, likeUserId))) {
//            String o = redisTemplate.opsForHash().get(RedisKeyUtils.MAP_KEY_USER_LIKED, RedisKeyUtils.getLikedKey(dynamicId, likeUserId)).toString();
//            if ("1".equals(o)) {
//                unLikes(dynamicId, likeUserId);
//                return LikedStatusEum.UNLIKE;
//            }
//            if ("0".equals(o)) {
//                likes(dynamicId, likeUserId);
//                return LikedStatusEum.LIKE;
//            }
//        }
//        UserLikes userLikes = userLikesMapper.selectOne(new QueryWrapper<UserLikes>().eq("l_dtid", dynamicId).eq("l_userid", likeUserId));
//        if (userLikes == null) {
//            UserLikes userLikes1 = new UserLikes();
//            userLikes1.setdynamicId(dynamicId);
//            userLikes1.setLikeUserId(likeUserId);
//            userLikesMapper.insert(userLikes1);
//            likes(dynamicId, likeUserId);
//            return LikedStatusEum.LIKE;
//        }
//        if (userLikes.getStatus() == 1) {
//            unLikes(dynamicId, likeUserId);
//            return LikedStatusEum.UNLIKE;
//        }
//
//        if (userLikes.getStatus() == 0) {
//            likes(dynamicId, likeUserId);
//            return LikedStatusEum.LIKE;
//        }
//        return "";
//    }
//    /**
//     * @author:
//     * Date: 2022/8/15
//     * 点赞动态对应用户
//     */
//    public List<UserLikesDto> getLikedDataFromRedis() {
//        Cursor<Map.Entry<Object, Object>> scan = redisTemplate.opsForHash().scan(RedisKeyUtils.MAP_KEY_USER_LIKED, ScanOptions.NONE);
//        List<UserLikesDto> list = new ArrayList<>();
//        while (scan.hasNext()) {
//            Map.Entry<Object, Object> entry = scan.next();
//            String key = (String) entry.getKey();
//            String[] split = key.split("::");
//            String dynamicId = split[0];
//            String likeUserId = split[1];
//            Integer value = (Integer) entry.getValue();
//            //组装成 UserLike 对象
//            UserLikesDto userLikeDetail = new UserLikesDto(dynamicId, likeUserId, value);
//            list.add(userLikeDetail);
//            //存到 list 后从 Redis 中删除
//            redisTemplate.opsForHash().delete(RedisKeyUtils.MAP_KEY_USER_LIKED, key);
//        }
//        return list;
//    }
//
//    /**
//     * @author:
//     * Date: 2022/8/15
//     * 列数
//     */
//    public List<UserLikCountDTO> getLikedCountFromRedis() {
//        Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, ScanOptions.NONE);
//        List<UserLikCountDTO> list = new ArrayList<>();
//        while (cursor.hasNext()) {
//            Map.Entry<Object, Object> map = cursor.next();
//            String key = (String) map.getKey();
//            Integer value = (Integer) map.getValue();
//            UserLikCountDTO userLikCountDTO = new UserLikCountDTO(key, value);
//            list.add(userLikCountDTO);
//            redisTemplate.opsForHash().delete(RedisKeyUtils.MAP_KEY_USER_LIKED_COUNT, key);
//        }
//        System.out.println(list+"--------------------------------------------------------------------------------------------");
//        return list;
//    }


}
